﻿/*********************************************************
 * 开发人员：小兵
 * 创建时间：2012-10-8 16:24:06
 * 描述说明：
 * 
 * 更改历史：
 * 
 * *******************************************************/
namespace Mozlite.Data.Components.Structures
{
    using System;
    using System.Web;
    using System.Data;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    /// <summary>
    /// 默认数据库实例。
    /// </summary>
    /// <typeparam name="THelper">SQL辅助类型。</typeparam>
    public class Database<THelper> : BaseSqlHelper<THelper>, IDatabase where THelper : ISqlHelper
    {
        /// <summary>
        /// 初始化类型<see cref="Database&lt;THelper&gt;"/>。
        /// </summary>
        /// <param name="helper">数据库辅助接口实例对象。</param>
        public Database(THelper helper)
            : base(helper)
        { }

        /// <summary>
        /// 判断表格是否已经存在。
        /// </summary>
        /// <param name="name">名称。</param>
        /// <returns>如果存在返回<c>true</c>，否则返回<c>false</c>。</returns>
        public virtual bool ContainsTable(string name)
        {
            return GetTable(name) != null;
        }

        /// <summary>
        /// 通过名称获取表格实例。
        /// </summary>
        /// <param name="name">名称。</param>
        /// <returns>如果存在返回表格实例，否则返回<c>null</c>。</returns>
        public virtual ITable GetTable(string name)
        {
            throw new NotImplementedException();
        }


        /// <summary>
        /// 保存表格。
        /// </summary>
        /// <param name="table">要保存的表格实例对象。</param>
        public virtual void SaveTable(ITable table)
        {
            throw new NotImplementedException();
        }

        /// <summary>
        /// 新建表格。
        /// </summary>
        /// <param name="name">名称。</param>
        /// <returns>返回新建表格的实例对象。</returns>
        public virtual ITable CreateTable(string name)
        {
            if(String.IsNullOrEmpty(name))
                throw new ArgumentNullException("name");
            if(GetTable(name) != null)
                throw new ArgumentException("A table named '{0}' already exists.".FormatWith(name));

            return new Table(name);
        }
    }
}
